package dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import to.Func_Dpto;
import to.Funcionario;
import to.Usuario;
import util.HibernateUtil;

public class FuncionarioDAO {

	public Funcionario buscarFuncionarioPorCodigo(Integer idUser) {

		Funcionario f = new Funcionario();
		Session session = null;

		try {
			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Funcionario.class, "f");
			criteria.add(Restrictions.eq("f.id", idUser));
			f = (Funcionario) criteria.uniqueResult();

		} catch (Exception e) {
			e.printStackTrace();
		}
		return f;
	}

	public Funcionario buscarPorCodigo(Usuario usuario) {

		Funcionario f = new Funcionario();
		Session session = null;

		try {
			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Funcionario.class, "f");
			criteria.add(Restrictions.eq("f.usuario", usuario));
			f = (Funcionario) criteria.uniqueResult();

		} catch (Exception e) {
			e.printStackTrace();
		}
		return f;
	}

	public List<Func_Dpto> buscaTodosFuncionarios(Integer codDepto) {

		List<Func_Dpto> listaFuncionario = new ArrayList<Func_Dpto>();
		Session session = null;

		try {
			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Func_Dpto.class, "fd")
					.createAlias("fd.dpto", "d").createAlias("fd.func", "f");
			criteria.add(Restrictions.eq("d.id", codDepto));
			criteria.addOrder(Order.asc("f.nome"));
			listaFuncionario = (List<Func_Dpto>) criteria.list();

		} catch (Exception e) {
			e.printStackTrace();
		}
		return listaFuncionario;
	}

	public List<Funcionario> buscaFuncionariosGeral() {

		List<Funcionario> listaFuncionario = new ArrayList<Funcionario>();
		Session session = null;

		try {
			session = HibernateUtil.getSessionFactory().openSession();
			Criteria criteria = session.createCriteria(Funcionario.class, "f");
			criteria.addOrder(Order.asc("f.nome"));
			listaFuncionario = (List<Funcionario>) criteria.list();

		} catch (Exception e) {
			e.printStackTrace();
		}
		return listaFuncionario;
	}

}
